home *** CD-ROM | disk | FTP | other *** search
/ SGI Varsity Update 1998 August / SGI Varsity Update 1998 August.iso / dist / dist6.5 / il_dev.idb / usr / include / il / ilView.h.z / ilView.h
C/C++ Source or Header  |  1998-07-29  |  18KB  |  615 lines

  1. #if 0 
  2.  
  3.     Copyright (c) 1991 SGI   All Rights Reserved
  4.     THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF SGI
  5.     The copyright notice above does not evidence any
  6.     actual or intended publication of such source code,
  7.     and is an unpublished work by Silicon Graphics, Inc.
  8.     This material contains CONFIDENTIAL INFORMATION that
  9.     is the property of Silicon Graphics, Inc. Any use,
  10.     duplication or disclosure not specifically authorized
  11.     by Silicon Graphics is strictly prohibited.
  12.  
  13.     RESTRICTED RIGHTS LEGEND:
  14.  
  15.     Use, duplication or disclosure by the Government is
  16.     subject to restrictions as set forth in subdivision
  17.     (c)(1)(ii) of the Rights in Technical Data and Computer
  18.     Software clause at DFARS 52.227-7013, and/or in similar
  19.     or successor clauses in the FAR, DOD or NASA FAR
  20.     Supplement.  Unpublished- rights reserved under the
  21.     Copyright Laws of the United States.  Contractor is
  22.     SILICON GRAPHICS, INC., 2011 N. Shoreline Blvd.,
  23.     Mountain View, CA 94039-7311
  24.  
  25. #endif
  26. /*
  27.     ilView contains the state of a view such as position within the ilDisplay, 
  28.     position within the ilImage and current size of the view.
  29. */
  30.  
  31. #ifndef _ilView_h_
  32. #define _ilView_h_
  33.  
  34. #include <X11/Xlib.h>
  35.  
  36. #include <il/ilLink.h>
  37. #include <il/ilImage.h>
  38. #include <il/ilIndexableList.h>
  39. #include <il/ilDisplayDefs.h>
  40.  
  41. //
  42. // ilView Enumerated Types
  43. //
  44.  
  45. // ilView border styles
  46.  
  47. enum ilViewBorderStyle {
  48.     ilViewBdrSolidLines        = 0,    // Solid lines (old style)
  49.     ilViewBdrDashedLines    = 1,     // Dashed lines
  50.     ilViewBdrCornerHandles  = 2,    // Handles on corners
  51.     ilViewBdrMiddleHandles  = 3     // Handles on mid-side (slow wipe)
  52. };
  53.  
  54. // ilView state
  55.  
  56. enum ilViewState {
  57.     ilViewAnyState        = 1 << 0, 
  58.     ilViewMovedView        = 1 << 1, 
  59.     ilViewMovedImg        = 1 << 2, 
  60.     ilViewResized        = 1 << 3, 
  61.     ilViewExposed        = 1 << 4, 
  62.     ilViewBorders        = 1 << 5
  63. };
  64.  
  65. // ilView Callbacks (see bottom)
  66.                 
  67. enum ilViewCb {
  68.     ilViewPostRenderCb        = 1, 
  69.     ilViewBorderRenderCb    = 2, 
  70.     ilViewAllCb            = 3
  71. };
  72.  
  73. // ilView stereo pair identifiers
  74.  
  75. enum ilViewImgPairIdx {
  76.     ilViewImgPairLeft        = 0,
  77.     ilViewImgPairRight        = 1
  78. };
  79.  
  80.  
  81. class ilViewColor {
  82. public:
  83.  
  84.     float red, green, blue;
  85.     int index;
  86.  
  87.     void get(float& Red, float& Green, float& Blue) 
  88.     { Red = red; Green = green; Blue = blue; }
  89.     void set(float Red, float Green, float Blue) 
  90.     { red = Red; green = Green; blue = Blue; index = -1; }
  91.     int getIndex() { return index; }
  92.     void setIndex(int Index) { index = Index; }
  93.     void invalidateIndex()
  94.     { index = -1; }
  95.     int isValidIndex()
  96.     { return index >= 0; }
  97. };
  98.  
  99. // Queued view tile to paint
  100. class ilViewQTile : public ilLinkItem
  101. {
  102. public:
  103.  
  104.     ilViewQTile() 
  105.     { tile.x = tile.y = tile.nx = tile.ny = 0; mode = 0; }
  106.     ilViewQTile(const iflTile2D<int>& t, int m)
  107.     { init(t, m); }
  108.     ~ilViewQTile() {}
  109.     void init(const iflTile2D<int>& t, int m)
  110.         { mode = m; 
  111.           tile.x  = t.x;  tile.y  = t.y; 
  112.           tile.nx = t.nx; tile.ny = t.ny; 
  113.         }
  114.     
  115.     iflTile2D<int> tile;
  116.     int mode;
  117. };
  118.  
  119. class ilDisplayMgr;
  120.  
  121. // ilView is a sub-region of an ilDisplay. It is used to view
  122. // part of an image on the screen. It is managed by ilDisplay.
  123. //
  124. class ilView : public ilLink, public ilLinkItem {
  125. public:
  126.  
  127.     iflClassListDeclare
  128.  
  129.     friend class ilDisplay;
  130.     friend class ilViewCbArg;
  131.     
  132.     ~ilView();
  133.  
  134.     // external api: begin
  135.  
  136.     ilView(ilDisplay* disply, ilImage* img, int mode = 0);
  137.     // external api: name=ilViewDisp
  138.     ilView(ilDisplay* disply); // XXX is this useful ???
  139.  
  140.     ilDisplay* getDisplay() { return disp; }
  141.  
  142. // View configuration
  143.  
  144.     void getPos(int& x, int& y);
  145.     void getSize(int& x, int& y);
  146.  
  147.     virtual void getImgPos(float& x, float& y, unsigned imgIdx = 0);
  148.     virtual void getImgSize(int& x, int& y, unsigned imgIdx = 0);
  149.  
  150.     // external api: name=getImgPos3D
  151.     virtual void getImgPos(float& x, float& y, float& z, unsigned imgIdx = 0);
  152.     // external api: name=getImgSize3D
  153.     virtual void getImgSize(int& x, int& y, int& z, unsigned imgIdx = 0);
  154.  
  155.     float getZ() { return iPos.z; }
  156.     void setZ(float z);
  157.         
  158.     virtual void setImg(ilImage* ilInImg, unsigned imgIdx = 0);
  159.             
  160.     virtual ilImage* getImg(unsigned imgIdx = 0);
  161.  
  162.     const char* getName(int flags=0);
  163.  
  164.     void setNop(int noOp) { nop = noOp; }
  165.     int  isNop() { return nop == 0? FALSE : TRUE; }
  166.  
  167.     void setDefer(int defer);
  168.     int  isDefer() { return defer == 0 ? FALSE:TRUE; }
  169.  
  170.     void getPixel(int x, int y, iflPixel& pix, int mode = 0,
  171.               unsigned imgIdx = 0);
  172.     void setPixel(int x, int y, iflPixel& pix, int mode = 0,
  173.               unsigned imgIdx = 0);
  174.  
  175.     // XXX allow space for ix,iy and space for returned x,y ???
  176.     
  177.     // Return window location (x,y) at image location (ix,iy)
  178.     void getImgLoc(float ix, float iy, float& x, float& y,
  179.                int mode = ilLocIn, 
  180.                iflOrientation orientation = iflOrientation(0),
  181.                unsigned imgIdx = 0);
  182.     
  183.     // Return image location (ix,iy) at window location (x,y)
  184.     void getLoc(float x, float y, float& ix, float& iy,
  185.             int mode = ilLocIn, 
  186.             iflOrientation orientation = iflOrientation(0),
  187.             unsigned imgIdx = 0);
  188.  
  189.     // external api: name=getLocMode
  190.     void getLoc(float& ix, float& iy, int mode = ilLocIn|ilCenter, 
  191.         iflOrientation orientation = iflOrientation(0),
  192.         unsigned imgIdx = 0);
  193.  
  194.     // Set image location (ix,iy) to window location (x,y)
  195.     void setLoc(float ix, float iy, float x, float y,
  196.             int mode = ilLocIn, 
  197.             iflOrientation orientation = iflOrientation(0),
  198.             unsigned imgIdx = 0);
  199.  
  200.     // external api: name=setLocMode
  201.     void setLoc(float ix, float iy, int mode = ilLocIn|ilCenter, 
  202.             iflOrientation orientation = iflOrientation(0),
  203.             unsigned imgIdx = 0);
  204.  
  205.     void setAutoCenter(int enable=TRUE);
  206.     int isAutoCentered() { return autoCenter; }
  207.  
  208.     int findEdge(int x, int y, int margin = -1, int mode = ilDspCoord);
  209.  
  210.     void getBackground(float& red, float& green, float& blue)    
  211.     { back.get(red, green, blue); }
  212.     void setBackground(float red, float green, float blue)
  213.     { back.set(red, green, blue); }
  214.  
  215.     void getErrorColor(float& red, float& green, float& blue) 
  216.     { err.get(red, green, blue); }
  217.     void setErrorColor(float red, float green, float blue)
  218.     { err.set(red, green, blue); }
  219.  
  220.     int  isStaticUpdate() { return staticUpdate || autoStaticUpdate; }
  221.     void setStaticUpdate(int enable)     { staticUpdate = enable; }
  222.     void setAutoStaticUpdate(int enable) { autoStaticUpdate = enable; }
  223.  
  224.     void select();
  225.     void unselect();
  226.     int  isSelected();
  227.  
  228.     virtual int isStereoView();
  229.  
  230.     // Callback Setup
  231.  
  232.     // NOTE that prepare and/or finish callbacks may be NULL
  233.     
  234.     void setCallback(ilCallback* prepare, 
  235.              ilCallback* render, 
  236.              ilCallback* finish  = NULL)
  237.         {
  238.           postPrepareCB = prepare; 
  239.           postRenderCB  = render; 
  240.           postFinishCB  = finish; 
  241.         }
  242.  
  243.     void setBorderCallback(ilCallback* prepare, 
  244.                ilCallback* render, 
  245.                ilCallback* finish  = NULL)
  246.         { 
  247.           borderPrepareCB = prepare; 
  248.           borderRenderCB  = render; 
  249.           borderFinishCB  = finish; 
  250.         }
  251.  
  252.     void getCallback(ilCallback*& prepare, 
  253.              ilCallback*& render, 
  254.              ilCallback*& finish)
  255.         {
  256.           prepare = postPrepareCB; 
  257.           render  = postRenderCB; 
  258.           finish  = postFinishCB; 
  259.         }
  260.         
  261.     void getBorderCallback(ilCallback*& prepare, 
  262.                ilCallback*& render, 
  263.                ilCallback*& finish)
  264.         { 
  265.           prepare = borderPrepareCB; 
  266.           render  = borderRenderCB; 
  267.           finish  = borderFinishCB; 
  268.         }
  269.  
  270.     void addPreRenderCallback(ilCallback* cb);
  271.     ilStatus removePreRenderCallback(ilCallback* cb);
  272.  
  273.     // Callback Enable/Disable
  274.     
  275.     void enableCallback(int enable = TRUE)
  276.     { enableCB(ilViewPostRenderCb, enable); }
  277.     
  278.     void enableBorderCallback(int enable = TRUE)
  279.     { enableCB(ilViewBorderRenderCb, enable); }
  280.     
  281.     int isCallbackEnabled()
  282.     { return isCBEnabled(ilViewPostRenderCb); }
  283.     
  284.     int isBorderCallbackEnabled()
  285.     { return isCBEnabled(ilViewBorderRenderCb); }
  286.     
  287. // Border stuff
  288.  
  289.     int  getBorderStyle() { return bStyle; }
  290.     void setBorderStyle(int style = ilViewBdrSolidLines) 
  291.         { bStyle = style; setState(ilViewBorders); }
  292.  
  293.     int  getBorderWidth() { return bWidth; }
  294.     void setBorderWidth(int bordWidth) 
  295.         { bWidth = bordWidth; setState(ilViewBorders); }
  296.  
  297.     void getBorderColor(float& red, float& green, float& blue)    
  298.         { border.get(red, green, blue); }
  299.     void setBorderColor(float red, float green, float blue)
  300.         { border.set(red, green, blue); setState(ilViewBorders); }
  301.  
  302.     void setBorders(int flag, int mode = ilDefault);
  303.     int  hasBorders() { return borders != 0; }
  304.  
  305.     // Get 4 tiles that makeup borders (unclipped)
  306.     void getBorders(iflTile2Dint& top, iflTile2Dint& bot,
  307.             iflTile2Dint& lf, iflTile2Dint& rt, 
  308.             iflOrientation orientation);
  309.  
  310. // Display operators
  311.  
  312.     // Move view in display
  313.     void moveView(int x, int y, int mode = ilRelVal);
  314.  
  315.     // Move image in view
  316.     void moveImg(float x, float y, int mode = ilRelVal);
  317.  
  318.     // Move one or more edges of view
  319.     void wipe(int x, int y, int mode = ilRelVal);
  320.  
  321.     // Resize view by wiping edge/corner and opposite edge/corder
  322.     void wipeSize(int x, int y, int mode = ilDelVal | ilTopRight);
  323.  
  324.     // Wipe nearest edge on all views
  325.     void wipeSplit(int x, int y, int mode = ilRelVal);
  326.  
  327.     // Resize and move views so all visable
  328.     void split(int mode = ilAbsSplit|ilRowSplit|ilColSplit);
  329.  
  330.     // Align image within a view
  331.     void alignImg(int mode = ilCenter);
  332.  
  333.     // Align view to a reference view
  334.     void alignView(int mode = ilCenter, ilView* rView = NULL);
  335.  
  336.     // Update view position/size and position of image
  337.     void update(int x = 0, int y = 0, int nx = 0, int ny = 0, 
  338.         float imgX = 0, float imgY = 0, int mode = ilDelVal);
  339.  
  340.     // Paint damaged regions of view
  341.     void paint(int mode = 0)
  342.         { qPaint(NULL, mode); }
  343.  
  344.     // Queue damaged regions of view to be painted
  345.     void qPaint(ilMpNode* parent, int mode = 0, 
  346.         ilMpManager** pMgr = NULL);
  347.  
  348.     // Re-initialize view
  349.     void display(int vMode =ilCenter, int iMode =ilCenter);
  350.  
  351.     // Resize view based on image size and mode
  352.     void resize(int mode = 0);
  353.  
  354.     // Save view
  355.     ilStatus save(ilImage* img, int mode = 0);
  356.  
  357.     // indicate view needs to be repainted for some external reason
  358.     // (like graphics drawn on top that need to be updated)
  359.     //
  360.     void setDirty();
  361.     
  362.     // controls display of images with alpha, if 
  363.     void showTransparency(int enable=TRUE);
  364.     int isTransparencyShown();
  365.  
  366.     // external api: end 
  367.  
  368.     #if defined(IL2_5_COMPAT)
  369.     void getImgPos(int& x, int& y)
  370.         {
  371.         float xf, yf;
  372.         getImgPos(xf, yf);
  373.         x = xf;
  374.         y = yf;
  375.         }
  376.     void getLoc(int x, int y, int& ix, int& iy, int mode = ilLocIn)
  377.         {
  378.         float xf = x, yf = y, ixf, iyf;
  379.         getLoc(xf, yf, ixf, iyf, mode);
  380.         ix = ixf;
  381.         iy = iyf;
  382.         }
  383.     #endif
  384.  
  385. protected:
  386.  
  387.     // file tile with error color
  388.     ilStatus qFillError(ilMpNode* parent, const iflTile2D<int>& tile,
  389.                         int buffEnables=0)
  390.     { return qFill(parent, tile, err, 0, buffEnables); }
  391.  
  392.     // file tile with background color
  393.     ilStatus qFillBackground(ilMpNode* parent, const iflTile2D<int>& tile, 
  394.                  int mode=0, int buffEnables=0)
  395.     { return qFill(parent, tile, back, mode, buffEnables); }
  396.  
  397.     // file tile with border color
  398.     ilStatus qFillBorder(ilMpNode* parent, const iflTile2D<int>& tile, 
  399.              int mode=0, int buffEnables=0)
  400.     { return qFill(parent, tile, border, mode, buffEnables); }
  401.  
  402.     // View configuration queries
  403.     void getImgSizeImg(ilImage* img, int& x, int& y, int& z);
  404.  
  405.     virtual void reset();
  406.     virtual void alterAction();
  407.  
  408.     ilDisplay* disp;        // ilDisplay for this view
  409.  
  410.     // render a mapped img tile into the view
  411.     // called by render()
  412.     virtual ilStatus qRenderTile(ilDisplayMgr* parent, 
  413.                  const iflTile2D<float>&,
  414.                  const iflTile2D<int>& tile, int mode);
  415.  
  416. private:
  417.     // render a tile in the view
  418.     void qRender(ilDisplayMgr* parent, const iflTile2D<int>& tile, int mode);
  419.  
  420.     // Add tile to list of view tiles to render
  421.     void addTile(const iflTile2D<int>& tile, int mode);
  422.  
  423.     // Queue list of tiles to render
  424.     int queueImgTiles(ilDisplayMgr* parent);
  425.     int queueBorderTiles(ilDisplayMgr* parent);
  426.     int queueFillTiles(ilDisplayMgr* parent);
  427.  
  428.     // Callback control
  429.     
  430.     ilStatus doPreRenderCallbacks(ilMpManager* mgr);
  431.  
  432.     void doPostRenderCallbacks();
  433.     void qPostRenderCallbacks(ilDisplayMgr* parent);
  434.     
  435.     void doBorderCallbacks();
  436.     void qBorderCallbacks(ilDisplayMgr* parent);
  437.     
  438.     void enableCB(int mask, int enable = TRUE);
  439.     int isCBEnabled(int mask)
  440.         { return cbEnable & mask; }
  441.  
  442.     int hasPostCallback()
  443.         { return isCBEnabled(ilViewPostRenderCb) && postRenderCB; }
  444.     int hasBorderCallback()
  445.         { return isCBEnabled(ilViewBorderRenderCb) && borderRenderCB; }
  446.  
  447.     // paint or erase borders around view
  448.     virtual void paintBorders();
  449.  
  450.     int  needsPaint();
  451.     int  isDirty();
  452.     int  isBorderDirty();
  453.     void setBorderDirty();
  454.     void clearDirty(int mode=0);
  455.  
  456.     // Get tile of current view position/size
  457.     void getTile(iflTile2D<int>& tile);
  458.     // Get tile of new view position/size
  459.     void getNewTile(iflTile2D<int>& tile);
  460.  
  461.     // Move image in view
  462.     void moveImgIdx(float x, float y, unsigned int imgIdx, int mode);
  463.  
  464.     // Get delta position, size and image position (since last paint)
  465.     void getDel(iflXYint& dVPos, iflXYint& dVSize, iflXYfloat& dIPos);
  466.     void getDel(iflXYint& dVPos, iflXYint& dVSize, iflXYZfloat& dIPos);
  467.  
  468.     // Get callback deltas (snapshot of actual deltas)
  469.     void getCbDel(iflXYint& dVPos, iflXYint& dVSize, iflXYfloat& dIPos);
  470.     void getCbDel(iflXYint& dVPos, iflXYint& dVSize, iflXYZfloat& dIPos);
  471.  
  472.     // Methods to get/set view state
  473.     
  474.     void clrState()        { vState = 0; needStatic = False; }
  475.     void setState(int state)    { vState |= state; }
  476.     int  getState()        { return vState; }
  477.     int  isState(int state)    { return vState&state; }
  478.         
  479.     int  needStaticUpdate();    // Returns TRUE if whole img needs update
  480.     int  isNewDataExposed();    // Returns TRUE if new img data exposed
  481.  
  482.     void init(int mode);
  483.     void initSize(int mode);
  484.  
  485.     void updateState();
  486.     
  487.     // fill tile with specified color
  488.     ilStatus qFill(ilMpNode* parent, 
  489.            const iflTile2D<int>& tile, ilViewColor& color, 
  490.            int mode=0, int buffEnables=0);
  491.  
  492.     void deleteList(ilIndexableList& list);
  493.  
  494.     int  hasDel();
  495.     int  hasViewDel();
  496.  
  497.     int  hasLastDel();
  498.     int  hasLastViewDel();
  499.  
  500.     void applyDel();
  501.     void sumDel(const iflXYint& dVPos, const iflXYint& dVSize, 
  502.         const iflXYfloat& dIPos);
  503.     void sumDelImgIdx(const iflXYfloat& dIPos, unsigned int imgIdx);
  504.         
  505.     void clearDel();
  506.     void clearCbDel();
  507.     void clearLastDel();
  508.  
  509.     void updateCbDel();
  510.     
  511.     void getLastTile(iflTile2D<int>& tile);
  512.  
  513.     void setLastDel(const iflXYint& dVPos, const iflXYint& dVSize, 
  514.             const iflXYZfloat& dIPos);
  515.     void getLastDel(iflXYint& dVPos, iflXYint& dVSize, iflXYZfloat& dIPos);
  516.  
  517.     void setEdge(int iedge) { edge = iedge; }
  518.     int  getEdge() { return edge; }
  519.  
  520.     inline int round(float val) { return val>0? int(val+0.5):int(val-0.5); }
  521.  
  522.     void setSize(int x, int y);
  523.     void setPos(int x, int y);
  524.     void updateImgCenter();
  525.     void updateViewInfo();
  526.     
  527.     void checkTransparency();
  528.     void cleanupTransparency();
  529.  
  530.     ilIndexableList imgList;    // List of image tiles to paint
  531.     ilIndexableList borderList;    // List of border tiles to paint
  532.     ilIndexableList fillList;    // List of fill tiles to paint
  533.     ilIndexableList freeList;    // List of free ilViewQTile*'s
  534.  
  535.     class ilBlendImg* blend;    // used when showing transparency
  536.  
  537.     iflXYZfloat iPos;        // position of view within image
  538.     iflXYint vPos;        // position of view within display
  539.     iflXYint size;        // size of view
  540.     iflXYint dPos;        // position of display on the screen
  541.  
  542.     iflXYint delVSize;        // Delta view size/position and img size.
  543.     iflXYint delVPos;        // Used to defer display operations
  544.     iflXYZfloat delIPos;
  545.  
  546.     iflXYint lastDelVSize;    // Used to sync back to front
  547.     iflXYint lastDelVPos;    // in double buffer mode
  548.     iflXYZfloat lastDelIPos;
  549.  
  550.     iflXYint cbDelVPos;        // Snap-shot of deltas for callbacks
  551.     iflXYint cbDelVSize;
  552.     iflXYZfloat cbDelIPos;
  553.  
  554.     ilHwViewInfoHint viewInfo;    // view info hint for draws
  555.     
  556.     ilViewColor back;        // background color
  557.     ilViewColor err;        // error color
  558.     ilViewColor border;        // border color
  559.     int bStyle;            // border style (0/1 = lines/handles)
  560.     int bWidth;            // border width
  561.     int borders;        // border on (TRUE/FALSE)
  562.  
  563.     int fDirty;            // front buffer needs painting
  564.     int bDirty;            // back buffer needs painting
  565.     int fBorderDirty;        // front buffer border needs painting
  566.     int bBorderDirty;        // back buffer border needs painting
  567.     int newDataExposed;        // TRUE if new img data exposed (roam)
  568.  
  569.     int needStatic;        // if TRUE then need static update
  570.     int staticUpdate;        // if TRUE then do static update always
  571.     int autoStaticUpdate;    // if TRUE then do static update if needed
  572.  
  573.     iflXYfloat iCenter;        // center pixel of input image
  574.     int autoCenter;        // if TRUE then track the image pixel in the
  575.                 // center of the view and keep it there when 
  576.                 // the image is altered
  577.     int movedCenter;        // if TRUE the image center has been changed
  578.  
  579.     int vState;            // State of ilView
  580.  
  581.     int mode;            // op mode
  582.     int defer;            // defer painting this view
  583.     int nop;            // op or nop on this view
  584.     char edge;            // default edge
  585.  
  586.     char showTrans;             // are we showing transparency
  587.     
  588.     char spare0;                // XXX unused
  589.     char spare1;
  590.  
  591.     int cbEnable;        // Callback functions enabled
  592.     
  593.     // Post rendering callback
  594.     ilCallback* postPrepareCB;    // prepare for rendering
  595.     ilCallback* postRenderCB;    // do actual rendering
  596.     ilCallback* postFinishCB;    // finish rendering
  597.     
  598.     // Border callbask
  599.     ilCallback* borderPrepareCB;// prepare for borders
  600.     ilCallback* borderRenderCB;    // render borders
  601.     ilCallback* borderFinishCB;    // finish for borders
  602.     
  603.     ilCallbackList* preRenderCB;// callback to do any pre-rendering setup.
  604.  
  605. protected:
  606.     virtual void _updateImgCenter();
  607.     virtual void _recenter();
  608.     virtual void _updateDelImgPosIdx(unsigned int imgIdx, float dx, float dy);
  609.     virtual void _applyImgDel();
  610.     virtual void _clearImgDel();
  611.     virtual int _hasImgDel();
  612. };
  613.  
  614. #endif
  615.